package es.upm.fi.dia.oeg.map4rdf.client.widget;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import name.alexdeleon.lib.gwtblocks.client.widget.loading.LoadingWidget;
import net.customware.gwt.presenter.client.EventBus;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.URL;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import com.googlecode.gwt.charts.client.ColumnType;
import com.googlecode.gwt.charts.client.DataTable;
import com.googlecode.gwt.charts.client.corechart.BarChart;
import com.googlecode.gwt.charts.client.corechart.BarChartOptions;
import com.googlecode.gwt.charts.client.corechart.LineChart;
import com.googlecode.gwt.charts.client.corechart.LineChartOptions;
import com.googlecode.gwt.charts.client.corechart.PieChart;
import com.googlecode.gwt.charts.client.corechart.PieChartOptions;
import com.googlecode.gwt.charts.client.options.CurveType;
import es.upm.fi.dia.oeg.map4rdf.client.event.StatisticsSummaryEvent;
import es.upm.fi.dia.oeg.map4rdf.client.resource.BrowserMessages;
import es.upm.fi.dia.oeg.map4rdf.client.resource.BrowserResources;
import es.upm.fi.dia.oeg.map4rdf.client.util.StatisticDataValue;
import es.upm.fi.dia.oeg.map4rdf.client.util.StatisticDimension;
import es.upm.fi.dia.oeg.map4rdf.client.util.LocaleUtil;
import es.upm.fi.dia.oeg.map4rdf.client.util.Statistic;
import es.upm.fi.dia.oeg.map4rdf.client.util.StatisticDimensionY;
import es.upm.fi.dia.oeg.map4rdf.client.util.StatisticServer;
import es.upm.fi.dia.oeg.map4rdf.share.GeoResource;
public class PopupStatisticsView extends Composite{
private GeoResource resource;
private String statisticsServiceURL;
private BrowserMessages browserMessages;
private BrowserResources browserResources;
private EventBus eventBus;
private WidgetFactory widgetFactory;
private Grid statisticsGrid;
private ListBox statisticsBox;
private ListBox dimensionsXBox;
private ListBox dimensionsYBox;
private ListBox aggrBox;
private Label aggrLabel;
private Label errorLabel;
private ArrayList<Statistic> statistics;
private ArrayList<StatisticDimension> dimensions;
private Statistic selectedStatistic;
private StatisticDimension selectedDimensionX;
private StatisticDimensionY selectedDimensionY;
private int width;
private int height;
private Panel mainPanel;
private Grid mainGrid;
private Grid chartGrid;
public enum ChartType {
PIE,LINE,BAR
}
private ChartType [] charts={ChartType.PIE,ChartType.LINE,ChartType.BAR};
private int selectedChart=0;
private List<StatisticDataValue> lastStatisticsValues;
//TODO add aemet LoadingBox for statistics here and replace the old loadingWidget.
private LoadingWidget loadingWidget;
public PopupStatisticsView(GeoResource resource,String statisticsServiceURL,int width,int height,EventBus eventBus,BrowserMessages browserMessages,BrowserResources browserResources,WidgetFactory widgetFactory){
this.resource=resource;
this.statisticsServiceURL=statisticsServiceURL;
this.eventBus= eventBus;
this.browserMessages = browserMessages;
this.browserResources = browserResources;
this.widgetFactory = widgetFactory;
this.width=width;
this.height=height;
initWidget(createUi());
loadingWidget.getElement().getStyle().setProperty("diplay", "");
Timer timer=new Timer(){
@Override
public void run() {
initAsync();
loadingWidget.getElement().getStyle().setDisplay(Display.NONE);
}
};
timer.schedule(50);
}
private Widget createUi() {
FlowPanel panel= new FlowPanel();
this.mainPanel=panel;
Button closeButton = new Button();
closeButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
eventBus.fireEvent(new StatisticsSummaryEvent(false,null));
}});
closeButton.setSize("32px","28px");
closeButton.getElement().appendChild(new Image(browserResources.closeButton()).getElement());
closeButton.setTitle(browserMessages.close());
panel.add(closeButton);
closeButton.getElement().getStyle().setPosition(Position.ABSOLUTE);
closeButton.getElement().getStyle().setTop(1, Unit.PX);
closeButton.getElement().getStyle().setProperty("left", "");
closeButton.getElement().getStyle().clearLeft();
closeButton.getElement().getStyle().setRight(1, Unit.PX);
closeButton.getElement().getStyle().setZIndex(2080);
mainGrid = new Grid(4,1);
Grid chooseGrid = new Grid(2,4);
statisticsGrid = new Grid(1,1);
statisticsBox= new ListBox();
statisticsBox.setMultipleSelect(false);
dimensionsXBox = new ListBox();
dimensionsXBox.setMultipleSelect(false);
dimensionsYBox = new ListBox();
dimensionsYBox.setMultipleSelect(false);
aggrBox = new ListBox();
aggrBox.setMultipleSelect(false);
aggrBox.setVisible(false);
aggrBox.addItem("SUM");
aggrBox.addItem("COUNT");
aggrBox.addItem("MIN");
aggrBox.addItem("MAX");
aggrBox.addItem("AVG");
aggrBox.addItem("GROUP_CONCAT");
aggrBox.addItem("SAMPLE");
aggrLabel= new Label(browserMessages.statisticsAggrChoose());
aggrLabel.setVisible(false);
errorLabel=new Label();
chooseGrid.setWidget(0, 0, new Label(browserMessages.statisticsChoose()));
chooseGrid.setWidget(0, 1, new Label(browserMessages.statisticsDimensionXChoose()));
chooseGrid.setWidget(0, 2, new Label(browserMessages.statisticsDimensionYChoose()));
chooseGrid.setWidget(0, 3, aggrLabel);
chooseGrid.setWidget(1, 0, statisticsBox);
chooseGrid.setWidget(1, 1, dimensionsXBox);
chooseGrid.setWidget(1, 2, dimensionsYBox);
chooseGrid.setWidget(1, 3, aggrBox);
mainGrid.setWidget(0, 0, chooseGrid);
mainGrid.setWidget(1, 0, errorLabel);
mainGrid.setWidget(3, 0, statisticsGrid);
statisticsBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(final ChangeEvent event) {
statisticsGrid.clear();
loadingWidget.getElement().getStyle().setProperty("display","");
Timer timer=new Timer(){
@Override
public void run() {
handlerStatisticChange(event);
loadingWidget.getElement().getStyle().setDisplay(Display.NONE);
}
};
timer.schedule(50);
}
});
dimensionsXBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(final ChangeEvent event) {
statisticsGrid.clear();
loadingWidget.getElement().getStyle().setProperty("display","");
Timer timer=new Timer(){
@Override
public void run() {
handlerDimensionXChange(event);
loadingWidget.getElement().getStyle().setDisplay(Display.NONE);
}
};
timer.schedule(50);
}
});
dimensionsYBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(final ChangeEvent event) {
statisticsGrid.clear();
loadingWidget.getElement().getStyle().setProperty("display", "");
Timer timer=new Timer(){
@Override
public void run() {
handlerDimensionYChange(event);
loadingWidget.getElement().getStyle().setDisplay(Display.NONE);
}
};
timer.schedule(50);
}
});
aggrBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(final ChangeEvent event) {
statisticsGrid.clear();
loadingWidget.getElement().getStyle().setProperty("display", "");
Timer timer=new Timer(){
@Override
public void run() {
handlerAggrChange(event);
loadingWidget.getElement().getStyle().setDisplay(Display.NONE);
}
};
timer.schedule(50);
}
});
loadingWidget = new LoadingWidget(browserResources.loadingIcon(),browserMessages.loading(), browserResources.css());
chartGrid=new Grid(1,3);
initCharts();
mainGrid.setWidget(2, 0, chartGrid);
return panel;
}
private void initCharts(){
chartGrid.getCellFormatter().getElement(0, selectedChart).getStyle().setBackgroundColor("#A4A4A4");
Image image=new Image(browserResources.chartPieIcon());
image.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
chartGrid.getCellFormatter().getElement(0, selectedChart).getStyle().setBackgroundColor("");
selectedChart=0;
chartGrid.getCellFormatter().getElement(0, selectedChart).getStyle().setBackgroundColor("#A4A4A4");
if(selectedStatistic!=null && selectedDimensionX!=null && selectedDimensionY!=null){
handlerChartChange();
}
}
});
chartGrid.setWidget(0, 0, image);
image=new Image(browserResources.chartLineIcon());
image.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
chartGrid.getCellFormatter().getElement(0, selectedChart).getStyle().setBackgroundColor("");
selectedChart=1;
chartGrid.getCellFormatter().getElement(0, selectedChart).getStyle().setBackgroundColor("#A4A4A4");
if(selectedStatistic!=null && selectedDimensionX!=null && selectedDimensionY!=null){
handlerChartChange();
}
}
});
chartGrid.setWidget(0, 1, image);
image=new Image(browserResources.chartBarIcon());
image.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
chartGrid.getCellFormatter().getElement(0, selectedChart).getStyle().setBackgroundColor("");
selectedChart=2;
chartGrid.getCellFormatter().getElement(0, selectedChart).getStyle().setBackgroundColor("#A4A4A4");
if(selectedStatistic!=null && selectedDimensionX!=null && selectedDimensionY!=null){
handlerChartChange();
}
}
});
chartGrid.setWidget(0, 2, image);
}
private void initAsync(){
statistics=getStatistics(statisticsServiceURL, resource.getUri());
statisticsBox.addItem("");
if(statistics!=null){
for(Statistic i:statistics){
statisticsBox.addItem(LocaleUtil.getBestLabel(i).replace("\"", "")+" ("+LocaleUtil.getBestLabel(i.getServer()).replace("\"", "")+")");
}
if(statistics.isEmpty()){
mainPanel.add(new Label(browserMessages.statisticsEmpty()));
}else{
mainPanel.add(mainGrid);
mainPanel.add(loadingWidget);
loadingWidget.getElement().getStyle().setDisplay(Display.NONE);
loadingWidget.getElement().getStyle().setPosition(Position.ABSOLUTE);
loadingWidget.getElement().getStyle().setTop(50, Unit.PC);
loadingWidget.getElement().getStyle().setLeft(50, Unit.PC);
loadingWidget.getElement().getStyle().setMarginTop(-16, Unit.PX);
loadingWidget.getElement().getStyle().setMarginRight(0, Unit.PX);
loadingWidget.getElement().getStyle().setMarginBottom(0, Unit.PX);
loadingWidget.getElement().getStyle().setMarginLeft(-80, Unit.PX);
loadingWidget.getElement().getStyle().setZIndex(2080);
}
} else {
mainPanel.add(new Label(browserMessages.errorCommunication()));
}
}
private void hideWidgets(){
errorLabel.setVisible(false);
aggrBox.setVisible(false);
aggrLabel.setVisible(false);
}
private void doVisibleWidgets(){
errorLabel.setVisible(true);
aggrBox.setVisible(true);
aggrLabel.setVisible(true);
}
private void handlerStatisticChange(ChangeEvent event){
hideWidgets();
lastStatisticsValues=null;
if(statisticsBox.getItemCount()>statistics.size()){
statisticsBox.removeItem(0);
}
selectedStatistic=statistics.get(statisticsBox.getSelectedIndex());
selectedDimensionX=null;
selectedDimensionY=null;
changeDimensionXBox();
}
private void handlerDimensionXChange(ChangeEvent event){
hideWidgets();
lastStatisticsValues=null;
if(dimensionsXBox.getItemCount()>dimensions.size()){
dimensionsXBox.removeItem(0);
}
selectedDimensionY=null;
selectedDimensionX=dimensions.get(dimensionsXBox.getSelectedIndex());
changeDimensionYBox();
}
private void handlerDimensionYChange(ChangeEvent event){
hideWidgets();
lastStatisticsValues=null;
if(dimensionsYBox.getItemCount()>selectedDimensionX.getDimensionsY().size()){
dimensionsYBox.removeItem(0);
}
selectedDimensionY=selectedDimensionX.getDimensionsY().get(dimensionsYBox.getSelectedIndex());
if(selectedDimensionX.getAggr()!=null && !selectedDimensionX.getAggr().isEmpty()){
drawStatistic();
} else {
errorLabel.setText(browserMessages.statisticsErrorNotAggr());
doVisibleWidgets();
drawStatistic();
}
}
private void handlerAggrChange(ChangeEvent event){
lastStatisticsValues=null;
errorLabel.setVisible(false);
drawStatistic();
}
private void handlerChartChange(){
statisticsGrid.clear();
loadingWidget.getElement().getStyle().setProperty("display", "");
Timer timer=new Timer(){
@Override
public void run() {
drawStatistic();
loadingWidget.getElement().getStyle().setDisplay(Display.NONE);
}
};
timer.schedule(50);
}
private void changeDimensionXBox(){
dimensionsXBox.clear();
dimensionsYBox.clear();
dimensionsXBox.addItem("");
dimensions = getDimensions(statisticsServiceURL,selectedStatistic.getServer().getUri(),selectedStatistic.getUri());
if(dimensions!=null){
if(!dimensions.isEmpty()){
for(int i=0;i<dimensions.size();i++){
dimensionsXBox.addItem(LocaleUtil.getBestLabel(dimensions.get(i)).replace("\"", ""));
}
} else {
widgetFactory.getDialogBox().showError(browserMessages.errorNotDimensions());
}
}else{
widgetFactory.getDialogBox().showError(browserMessages.errorCommunication());
}
}
private void changeDimensionYBox() {
dimensionsYBox.clear();
ArrayList<StatisticDimensionY> dimensionsY = selectedDimensionX.getDimensionsY();
dimensionsYBox.addItem("");
for(int i=0;i<dimensionsY.size();i++){
dimensionsYBox.addItem(LocaleUtil.getBestLabel(dimensionsY.get(i)).replace("\"", ""));
}
}
private void drawStatistic(){
if(lastStatisticsValues==null){
lastStatisticsValues = getValues(resource.getUri(), selectedStatistic.getServer().getUri(), selectedStatistic.getUri(), selectedDimensionX.getUri(), selectedDimensionY.getUri());
}
ScrollPanel scroll = new ScrollPanel();
FlowPanel panel = new FlowPanel();
scroll.add(panel);
scroll.setSize(((int)(0.7*width))+"px", ((int)(0.7*height))+"px");
String tableTitle=LocaleUtil.getBestLabel(selectedStatistic);
int chartWidth=(int)(0.68*width);
int chartHeight=(int)(0.68*height);
String xTitle=LocaleUtil.getBestLabel(selectedDimensionX);
String yTitle=LocaleUtil.getBestLabel(selectedDimensionY);
statisticsGrid.setWidget(0, 0, scroll);
drawChart(charts[selectedChart],tableTitle, panel, chartWidth, chartHeight, xTitle, yTitle, lastStatisticsValues);
}
private Set<String> getServers(String url){
String servers= getQueryJSON(url,"getServers","");
Set<String> set = new HashSet<String>();
if(servers!=null){
JSONValue value= JSONParser.parseStrict(servers);
if(value.isArray()!=null){
for(int i=0;i<value.isArray().size();i++){
set.add(value.isArray().get(i).toString().replace("\"", ""));
}
}
}
return set;
}
private ArrayList<Statistic> getStatistics(String url,String geoResourceUri){
String statistics= getQueryJSON(url,"getStatistics","Server=all&URI="+encodeParameter(geoResourceUri));
ArrayList<Statistic> stats= new ArrayList<Statistic>();
if(statistics!=null){
JSONValue value= JSONParser.parseStrict(statistics);
if(value.isObject()!=null){
JSONObject dataServer = value.isObject();
for(String serverURI: dataServer.keySet()){
JSONObject objectResponseServer=dataServer.get(serverURI).isObject();
StatisticServer statisticServer= new StatisticServer(serverURI);
if(objectResponseServer!=null){
if(objectResponseServer.get("labels")!=null && objectResponseServer.get("labels").isObject()!=null){
for(String key: objectResponseServer.get("labels").isObject().keySet()){
if(objectResponseServer.get("labels").isObject().get(key)!=null){
statisticServer.addLabel(key.replace("\"", ""), objectResponseServer.get("labels").isObject().get(key).toString().replace("\"", ""));
}
}
}
if(objectResponseServer.get("values")!=null && objectResponseServer.get("values").isArray()!=null){
JSONArray dataAllStatistics = objectResponseServer.get("values").isArray();
for(int i=0;i<dataAllStatistics.size();i++){
JSONObject dataStatistic = dataAllStatistics.get(i).isObject();
if(dataStatistic !=null && dataStatistic.get("uri")!=null){
Statistic statistic = new Statistic(dataStatistic.get("uri").toString().replace("\"", ""));
statistic.setServer(statisticServer);
if(dataStatistic.get("origin")!=null){
statistic.setOrigin(dataStatistic.get("origin").toString().replace("\"", ""));
}
JSONObject labels;
if(dataStatistic.get("labels")!=null && dataStatistic.get("labels").isObject()!=null){
labels = dataStatistic.get("labels").isObject();
for(String key: labels.keySet()){
if(labels.get(key)!=null){
statistic.addLabel(key.replace("\"", ""), labels.get(key).toString().replace("\"", ""));
}
}
}
stats.add(statistic);
}
}
}
}
}
}
Collections.sort(stats);
}else{
stats=null;
}
return stats;
}
private ArrayList<StatisticDimension> getDimensions(String url, String server, String statistic) {
String data = "Server=" +encodeParameter(server) +"&";
data = data + "Statistic=" + encodeParameter(statistic);
Map<String,StatisticDimension> dimMap = new HashMap<String, StatisticDimension>();
String dimensions= getQueryJSON(url,"getDimensions",data);
ArrayList<StatisticDimension> dims=new ArrayList<StatisticDimension>();
if(dimensions!=null){
JSONValue value= JSONParser.parseStrict(dimensions);
if(value.isArray()!=null){
for(int i=0;i<value.isArray().size();i++){
JSONValue valueDim=value.isArray().get(i);
if(valueDim.isObject()!=null){
JSONObject dim= valueDim.isObject();
if(dim.get("xURI")!=null && dim.get("xURI").isString()!=null){
String uri= dim.get("xURI").isString().toString().replace("\"", "");
StatisticDimension dimension= new StatisticDimension(uri);
if(dim.get("xType")!=null && dim.get("xType").isString()!=null){
dimension.setxType(dim.get("xType").isString().toString().replace("\"", ""));
}
if(dim.get("xLabels")!=null && dim.get("xLabels").isObject()!=null){
JSONObject labels = dim.get("xLabels").isObject();
for(String key: labels.keySet()){
if(labels.get(key)!=null){
dimension.addLabel(key.replace("\"", ""), labels.get(key).toString().replace("\"", ""));
}
}
}
if(dim.get("aggr")!=null && dim.get("aggr").isString()!=null){
dimension.setAggr(dim.get("aggr").isString().toString().replace("\"", ""));
}
if(dim.get("yURI")!=null && dim.get("yURI").isString()!=null){
String yURI= dim.get("yURI").isString().toString().replace("\"", "");
StatisticDimensionY dimensionY= new StatisticDimensionY(yURI);
if(dim.get("yType")!=null && dim.get("yType").isString()!=null){
dimensionY.setDimensionType(dim.get("yType").isString().toString().replace("\"", ""));
}
if(dim.get("yLabels")!=null && dim.get("yLabels").isObject()!=null){
JSONObject labels = dim.get("yLabels").isObject();
for(String key: labels.keySet()){
if(labels.get(key)!=null){
dimensionY.addLabel(key.replace("\"", ""), labels.get(key).toString().replace("\"", ""));
}
}
}
if(dimMap.containsKey(dimension.getUri())){
dimMap.get(dimension.getUri()).addDimensionY(dimensionY);
}else{
dimension.addDimensionY(dimensionY);
dimMap.put(dimension.getUri(), dimension);
}
}
}
}
}
}
}else{
return null;
}
dims.addAll(dimMap.values());
for(StatisticDimension dimension:dims){
Collections.sort(dimension.getDimensionsY());
}
Collections.sort(dims);
return dims;
}
private List<StatisticDataValue> getValues(String url, String server, String statistic,String dimensionX,String dimensionY){
List<StatisticDataValue> toReturn=new ArrayList<StatisticDataValue>();
HashMap<String,StatisticDataValue> mapa= new HashMap<String, StatisticDataValue>();
String data="";
data += "Server=" + encodeParameter(selectedStatistic.getServer().getUri()) +"&";
data += "URI=" + encodeParameter(resource.getUri())+"&";
data += "Statistic=" + encodeParameter(selectedStatistic.getUri())+"&";
data += "Dimension=" + encodeParameter(selectedDimensionX.getUri())+"&";
data += "DimensionY=" + encodeParameter(selectedDimensionY.getUri())+"&";
if(selectedDimensionX.getAggr()!=null && !selectedDimensionX.getAggr().isEmpty()){
data += "aggr=" + encodeParameter(selectedDimensionX.getAggr());
}else{
data += "aggr=" + aggrBox.getItemText(aggrBox.getSelectedIndex());
}
String datasValues= getQueryJSON(statisticsServiceURL, "getStatisticsValues", data);
if(datasValues!=null && !datasValues.isEmpty()){
JSONValue value= JSONParser.parseStrict(datasValues);
if( value!=null && value.isObject()!=null
&& value.isObject().get("results")!=null
&& value.isObject().get("results").isObject()!=null
&& value.isObject().get("results").isObject().get("bindings")!=null
&& value.isObject().get("results").isObject().get("bindings").isArray()!=null){
JSONArray array= value.isObject().get("results").isObject().get("bindings").isArray();
for(int i=0;i<array.size();i++){
if(array.get(i)!=null && array.get(i).isObject()!=null){
JSONObject punto=array.get(i).isObject();
String x="";
String y="";
String localeLabelX="";
String labelLabelX="";
if(punto.get("valueX")!=null && punto.get("valueX").isObject()!=null
&& punto.get("valueX").isObject().get("value")!=null
&& punto.get("valueX").isObject().get("value").isString()!=null){
x= punto.get("valueX").isObject().get("value").isString().toString().replace("\"", "");
}
if(punto.get("aggValueY")!=null && punto.get("aggValueY").isObject()!=null
&& punto.get("aggValueY").isObject().get("value")!=null
&& punto.get("aggValueY").isObject().get("value").isString()!=null){
y= punto.get("aggValueY").isObject().get("value").isString().toString().replace("\"", "");
}
if(punto.get("labelX")!=null && punto.get("labelX").isObject()!=null
&& punto.get("labelX").isObject().get("xml:lang")!=null
&& punto.get("labelX").isObject().get("xml:lang").isString()!=null){
localeLabelX= punto.get("labelX").isObject().get("xml:lang").isString().toString().replace("\"", "");
}
if(punto.get("labelX")!=null && punto.get("labelX").isObject()!=null
&& punto.get("labelX").isObject().get("value")!=null
&& punto.get("labelX").isObject().get("value").isString()!=null){
labelLabelX= punto.get("labelX").isObject().get("value").isString().toString().replace("\"", "");
}
if(!x.equals("") && !y.equals("")){
StatisticDataValue statisticDataValue;
if(mapa.containsKey(x)){
statisticDataValue=mapa.get(x);
}else{
statisticDataValue=new StatisticDataValue(x, y);
mapa.put(x, statisticDataValue);
}
if(!labelLabelX.isEmpty()){
statisticDataValue.addLabel(localeLabelX, labelLabelX);
}
}
}
}
}
}
toReturn.addAll(mapa.values());
Collections.sort(toReturn);
return toReturn;
}
private String encodeParameter(String decodedParameter){
String encoded=URL.encode(decodedParameter);
String splitParameter[]= encoded.split("#");
encoded="";
for(int j=0;j<splitParameter.length;j++){
if(j<splitParameter.length-1){
encoded=encoded+splitParameter[j]+"%23";
}else{
encoded=encoded+splitParameter[j];
}
}
return encoded;
}
native static String getQueryJSON(String url,String method,String urlData)/*-{
var toReturnData=null;
var toReturnJson = $wnd.jQuery.ajax(
{
type: 'GET',
url: url+method,
async:false,
data: urlData,
//contentType: "application/json;charset=utf-8",
datatype: "json",
success : function toReturn(data){
toReturnData = data;
},
error:function control(msg,url,line){
alert('A error ocurred: message='+msg.statusText+' ,url='+url+' ,line='+line+'.');
}
}
);
if(toReturnJson.status != 200 || toReturnJson.readyState != 4){
return null;
}
return toReturnJson.responseText;
}-*/;
private void drawChart(ChartType chartType,String tableTittle, Panel parent,int width,int height,String xTittle,String yTittle,List<StatisticDataValue> values){
DataTable dataTable = DataTable.create();
dataTable.addColumn(ColumnType.STRING, xTittle);
dataTable.addColumn(ColumnType.NUMBER, yTittle);
dataTable.addRows(values.size());
Collections.sort(values);
for(int i=0;i<values.size();i++){
dataTable.setCell(i, 0, LocaleUtil.getBestLabel(values.get(i)).replace("\"", ""));
dataTable.setCell(i, 1, Double.parseDouble(values.get(i).getY().replace("\"", "")));
}
switch (chartType) {
case PIE:
PieChartOptions optionsPie=PieChartOptions.create();
optionsPie.setTitle(tableTittle);
optionsPie.setWidth(width);
optionsPie.setHeight(height);
optionsPie.setIs3D(true);
PieChart chartPie=new PieChart();
parent.add(chartPie);
chartPie.draw(dataTable, optionsPie);
break;
case LINE:
LineChartOptions optionsLine=LineChartOptions.create();
optionsLine.setTitle(tableTittle);
optionsLine.setWidth(width);
optionsLine.setHeight(height);
optionsLine.setCurveType(CurveType.NONE);
LineChart chartLine=new LineChart();
parent.add(chartLine);
chartLine.draw(dataTable, optionsLine);
break;
case BAR:
BarChartOptions optionsBar=BarChartOptions.create();
optionsBar.setTitle(tableTittle);
optionsBar.setWidth(width);
optionsBar.setHeight(height);
BarChart chartBar=new BarChart();
parent.add(chartBar);
chartBar.draw(dataTable, optionsBar);
break;
default:
PieChartOptions optionsDef=PieChartOptions.create();
optionsDef.setTitle(tableTittle);
optionsDef.setWidth(width);
optionsDef.setHeight(height);
optionsDef.setIs3D(true);
PieChart chartDef=new PieChart();
parent.add(chartDef);
chartDef.draw(dataTable, optionsDef);
break;
}
}
}